/*
    此文件包含了智能小车信息的结构体定义。
*/
#ifndef CAR_H
#define CAR_H

#include <string>
#include <vector>

// 底盘
struct BasePlate
{
    std::string id;        // 编号
    std::string model;     // 型号
    int wheelbase;         // 轴距（mm）
    int track;             // 轮距（mm）
    int groundClearance;   // 最小离地间隙（mm）
    int turningRadius;     // 最小转弯半径（m）
    std::string driveType; // 驱动形式
    int maxRange;          // 最大行程（km）

    // 只有底盘有轮胎属性，直接定义在内部
    struct Tire
    {
        std::string modelT; // 型号
        int size;           // 尺寸（mm）
    };

    Tire tires[4]; // 轮胎（4个）
};

// AGX套件
struct AGX
{
    std::string model; // 型号
    int aiPerformance; // AI性能（TOPS）。用TOPS（每秒万亿次运算）来衡量AI处理器的性能，也称之为“算力”
    int cudaCores;     // CUDA核心数
    int tensorCores;   // Tensor CORE数
    int memory;        // 显存（GB）
    int storage;       // 存储（GB）
};

// 双目摄像头
struct BinocularCamera
{
    std::string model;  // 型号
    std::string camera; // 摄像头
    int rgbResolutionX; // RGB帧分辨率（宽度）
    int rgbResolutionY; // RGB帧分辨率（高度）
    int rgbFrameRate;   // RGB帧率
    int fovX;           // FOV（水平）
    int fovY;           // FOV（垂直）
    int depthFrameRate; // 深度帧率
};

// 多线激光雷达
struct Ladar
{
    std::string model;    // 型号
    int channels;         // 通道数
    double maxRange;      // 测试范围（m）
    double powerConsumed; // 功耗（W）
};

// 9轴陀螺仪
struct Gyroscope
{
    std::string model;        // 型号
    std::string manufacturer; // 厂家
};

// 液晶显示屏
struct LCD
{
    double size;       // 尺寸
    std::string model; // 型号
};

// 电池模块
struct Battery
{
    std::string parameters; // 参数（如24V/15Ah）
    double outputVoltage;   // 对外供电电压（V）
    double chargingTime;    // 充电时长（h）
};

// 最终的智能小车
struct CAR
{
    std::string id;                  // 编号
    BasePlate basePlate;             // 底盘
    AGX agx;                         // AGX套件
    BinocularCamera binocularCamera; // 双目摄像头
    Ladar ladar;                     // 激光雷达
    Gyroscope gyroscope;             // 陀螺仪
    LCD lcd;                         // 液晶显示屏
    Battery battery;                 // 电池模块
};

std::vector<CAR> car_init();
#endif